package com.zenithmind.chat.controller.base;

import com.zenithmind.common.result.Result;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 基础管理控制器接口 - 遵循接口隔离原则
 * 只包含管理相关的基础方法
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
public interface BaseManagementController<D> {

    /**
     * 创建
     * 
     * @param dto 数据传输对象
     * @return 创建的实体ID
     */
    @PostMapping
    @Operation(summary = "创建", description = "创建新的实体")
    Result<String> create(@Validated @RequestBody D dto);

    /**
     * 更新
     * 
     * @param id 主键ID
     * @param dto 数据传输对象
     * @return 是否成功
     */
    @PutMapping("/{id}")
    @Operation(summary = "更新", description = "更新实体信息")
    Result<Boolean> update(@Parameter(description = "主键ID") @PathVariable String id, 
                          @Validated @RequestBody D dto);

    /**
     * 删除
     * 
     * @param id 主键ID
     * @return 是否成功
     */
    @DeleteMapping("/{id}")
    @Operation(summary = "删除", description = "删除实体")
    Result<Boolean> delete(@Parameter(description = "主键ID") @PathVariable String id);

    /**
     * 批量删除
     * 
     * @param ids 主键ID列表
     * @return 是否成功
     */
    @DeleteMapping("/batch")
    @Operation(summary = "批量删除", description = "批量删除多个实体")
    Result<Boolean> deleteBatch(@RequestBody List<String> ids);

    /**
     * 启用/禁用
     * 
     * @param id 主键ID
     * @param enabled 是否启用
     * @return 是否成功
     */
    @PutMapping("/{id}/status")
    @Operation(summary = "启用/禁用", description = "设置实体启用状态")
    Result<Boolean> setEnabled(@Parameter(description = "主键ID") @PathVariable String id, 
                              @Parameter(description = "是否启用") @RequestParam Boolean enabled);
}
